'use strict'

const _ = require('lodash')

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = (app) => {
  const { router, controller, middleware } = app
  const { backendAuth } = middleware
  const { jwtAuth } = middleware.auth

  const { backend } = controller
  const { system } = backend
  const { config } = app

  const prefix = `/backend`

  const userAuth = jwtAuth({
    jwtName: 'admin',
    // loginUrl: `/admin/login`,
    secret: config.jwt.secret + 'admin',
    allowSession: true,
  })

  /**
   * 中间件
   */
  router.use(`${prefix}`, middleware.api) // API 通用中间件

  /**
   * 系统(无需登录)
   */
  // router.get(`${prefix}/area`, backend.area.areaList) // 省市区
  router.post(`${prefix}/login`, system.account.login) // 登录
  router.get(`${prefix}/system/setting`, system.admin.getSystemSetting) // 后台配置
  router.post(`${prefix}/upload`, middleware.upload, system.upload.upload) // 上传

  /**
   * 系统(需要登录)
   */
  router.use(`${prefix}`, middleware.api, userAuth, backendAuth) // 权限校验
  router.post(`${prefix}/system/upload`, middleware.upload, system.upload.upload) // 上传
  router.get(`${prefix}/system/home`, system.admin.home) // 系统首页
  router.put(`${prefix}/system/user/modify-password`, system.user.modifyPassword) // 系统用户密码修改
  router.post(`${prefix}/system/user/reset-password`, system.user.resetPassword) // 系统用户-重置密码
  router.get(`${prefix}/system/user/info`, system.user.getUserInfo) // 系统用户信息
  router.put(`${prefix}/system/user/info`, system.user.setUserInfo) // 系统用户信息
  router.get(`${prefix}/system/auth`, system.user.userAuth) // 系统用户权限
  // router.post(`/system/bind/wechat`, sysUser.setBindWeChat); // 绑定微信
  // router.get(`/system/bind/wechat`, sysUser.getBindWeChat); // 绑定微信
  // router.get(`${prefix}/system/dict/:id`, system.admin.dictDetail) // 系统字典列表
  router.get(`${prefix}/system/menu/tree`, system.menu.tree) // 系统菜单-菜单树
  router.get(`${prefix}/system/menu/route`, system.menu.route) // 系统菜单-路由
  router.get(`${prefix}/system/role/tree`, system.role.tree) // 系统角色-树
  router.post(`${prefix}/system/menu/copy`, system.menu.copy) // 菜单-复制
  router.resources(`systemMenu`, `${prefix}/system/menu`, system.menu) // 系统菜单
  router.resources(`systemUser`, `${prefix}/system/user`, system.user) // 系统用户
  router.resources(`systemRole`, `${prefix}/system/role`, system.role) // 系统角色
  router.resources(`systemDictData`, `${prefix}/system/dict/data`, system.dictData) // 字典数据
  router.resources(`systemDict`, `${prefix}/system/dict`, system.dict) // 字典
  router.get(`${prefix}/system/organize/tree`, system.organize.tree) // 组织-树
  router.resources(`systemOrganize`, `${prefix}/system/organize`, system.organize) // 组织
  router.post(`${prefix}/system/file/import-xlsx`, system.file.importXlsx) // 导入-xlsx
  router.post(`${prefix}/system/file/export-xlsx`, system.file.exportXlsx) // 导入-xlsx

  /**
   * 系统-配置
   */
  router.put(`${prefix}/system/setting`, userAuth, system.admin.setSystemSetting) // 后台配置-保存
  router.get(`${prefix}/system/config/dict`, system.admin.dictList) // 系统字典列表
  router.get(`${prefix}/system/config/constant`, system.admin.constantList) // 系统字典列表
  router.get(`${prefix}/system/config/:configType`, system.config.getConfig) // 系统配置-获取指定配置
  router.post(`${prefix}/system/config/:configType`, system.config.setConfig) // 系统配置-设置指定配置
  router.resources(`systemConfig`, `${prefix}/system/config`, system.config) // 系统配置

  /**
   * 文章
   */
  router.resources(`articleCategory`, `${prefix}/article/category`, backend.articleCategory) // 文章-分类
  router.resources(`article`, `${prefix}/article`, backend.article) // 文章

  /**
   * 活动配置
   */
  router.post(`${prefix}/activity/config/publish`, backend.activityConfig.publish) // 活动配置-发布

  /**
   * 用户
   */
  router.get(`${prefix}/user`, backend.user.index) // 用户-列表

  /**
   * 服务站
   */
  router.get(`${prefix}/store/info`, backend.store.getStoreInfo) // 服务站-信息
  router.put(`${prefix}/store/info`, backend.store.setStoreInfo) // 服务站-信息修改

  /**
   * 用户活动
   */
  router.post(`${prefix}/user/activity/audit`, backend.userActivity.audit) // 用户获得-审核
  router.post(`${prefix}/user/activity/cancel`, backend.userActivity.cancel) // 用户取消-取消

  /**
   * 项目接口
   */
  ;['store/user', 'store', 'activity/config', 'user/activity', 'activity'].map((path) => {
    const controllerName = _.camelCase(path)
    const controller = backend[controllerName]

    console.log('controllerName', controllerName)

    if (!controller) return console.error('路由加载失败，无效控制器', controllerName)

    router.resources(controllerName, `${prefix}/${path}`, controller)
  })
}
